package com.yc.thread.wait;

public class TestWait3 {
	
	/**
	 * 一个线程使用obj 加锁，另一个wait
	 * 不行：wait只能在获得锁的线程内使用，且这个锁必须是使用obj这个类加锁的
	 * 否则报错：java.lang.IllegalMonitorStateException
	 */
	public void m() {
		Object o = new Object();
		Object o2 = new Object();
		new Thread(() -> {
			System.out.println("T1 wait for the lock");
			synchronized(o2) {
				try {
					o.wait();
					System.out.println("T1 get the lock");
					Thread.sleep(10000);
					System.out.println("T1 is over");
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				
			}
			
		},"T1").start();//休眠，等待
		
//		try {
//			o.wait();//肯定停不下来，但不知道能不能让sleep永远停下来
//		} catch (InterruptedException e) {
//			e.printStackTrace();
//		}
		
	}
	
	public void m2() {
		Object o = new Object();
		o.notify();//java.lang.IllegalMonitorStateException
	}
	
	public void m3() {
		Object o = new Object();
		new Thread(() -> {
			synchronized(o) {
				o.notify();
				System.out.println("over");
				
			}
			
		},"T1").start();//休眠，等待
	}
	


	public static void main(String[] args) {
		TestWait3 tw = new TestWait3();
//		tw.m();
//		tw.m2();
		tw.m3();

	}

}
